<template>
  <v-container fluid>
    <v-row justify="center">
      <v-col cols="12" md="10" lg="8">

        <div class="text-h5 mb-2">代码运行与推导</div>
        <p class="text-body-1 mb-6">
          请将指定的代码片段粘贴到下方的编辑器中，然后点击“运行”按钮查看模拟推导结果。
        </p>

        <IDEInterface
            filename="editor.py"
            :code="editorCode"
            :expected-result="currentExpectedResult"
            @update:code="newCode => editorCode = newCode"
        />

      </v-col>
    </v-row>
  </v-container>
</template>

<script setup>
import { ref, watch } from 'vue';
import IDEInterface from '../components/IDEInterface.vue';

// --- 数据定义 (无变化) ---
const knowledgeBase = [
  {
    // AHP 层次分析法
    keywords: ['judgment_matrix', 'calculate_weights_geometric', 'AHP'],
    code: `import numpy as np

# 定义判断矩阵（政治/经济/社会/技术/环境/法律）
judgment_matrix = [
    [1, 3, 1/2, 2, 1/3, 4],
    [1/3, 1, 1/4, 1/2, 1/5, 2],
    [2, 4, 1, 3, 1/2, 5],
    [1/2, 2, 1/3, 1, 1/4, 3],
    [3, 5, 2, 4, 1, 6],
    [1/4, 1/2, 1/5, 1/3, 1/6, 1]
]

# 转换为numpy数组便于计算
matrix = np.array(judgment_matrix, dtype=np.float64)
n = matrix.shape[0]  # 矩阵阶数

# 方法1：几何平均法（根法）计算权重
def calculate_weights_geometric(matrix):
    row_products = np.prod(matrix, axis=1)
    nth_roots = np.power(row_products, 1/n)
    weights = nth_roots / np.sum(nth_roots)
    return weights

# 计算权重
weights = calculate_weights_geometric(matrix)
indices = ["政治(P)", "经济(E)", "社会(S)", "技术(T)", "环境(E)", "法律(L)"]

print("\\n各指标权重（几何平均法）：")
for i, (idx, weight) in enumerate(zip(indices, weights)):
    print(f"{idx}: {weight:.4f}")

# 计算最大特征值λ_max
matrix_times_weights = np.dot(matrix, weights)
lambda_max = np.mean(matrix_times_weights / weights)
print(f"\\n最大特征值λ_max: {lambda_max:.4f}")

# 一致性检验
CI = (lambda_max - n) / (n - 1)
RI = 1.24  # 6阶矩阵的平均随机一致性指标RI
CR = CI / RI

print(f"一致性指标CI: {CI:.4f}")
print(f"随机一致性指标RI: {RI}")
print(f"一致性比例CR: {CR:.4f}")

if CR < 0.1:
    print("结论：CR < 0.1，判断矩阵通过一致性检验，结果可信。")
else:
    print("结论：CR ≥ 0.1，判断矩阵一致性较差，需要调整。")
`,
    result: `各指标权重（几何平均法）：
政治(P): 0.1602
经济(E): 0.0643
社会(S): 0.2516
技术(T): 0.1009
环境(E): 0.3806
法律(L): 0.0425

最大特征值λ_max: 6.1223
一致性指标CI: 0.0245
随机一致性指标RI: 1.24
一致性比例CR: 0.0197
结论：CR < 0.1，判断矩阵通过一致性检验，结果可信。`
  },
  {
    // 市场吸引力评估
    keywords: ['MarketAttractiveness', 'select_target_markets', 'IKN高净值家庭'],
    code: `import numpy as np

# ====== 1. 细分市场吸引力评估模型 ======
class MarketAttractiveness:
    def __init__(self):
        # 评估维度权重（德尔菲法确定）
        self.weights = np.array([0.35, 0.30, 0.20, 0.15])  # [市场规模, 增长率, 竞争强度, 政策支持]

        # 细分市场四维评分矩阵（1-10分）
        self.scores = np.array([
            [9.5, 9.8, 4.2, 8.8],  # IKN高净值家庭
            [8.2, 9.0, 6.5, 9.5],  # 网约车司机
            [5.8, 7.2, 3.0, 9.2],  # 政府公务车
            [6.2, 6.5, 5.8, 6.5]   # 苏门答腊企业主
        ])

        # 市场名称映射
        self.market_names = {
            0: "IKN高净值家庭",
            1: "网约车司机",
            2: "政府公务车",
            3: "苏门答腊企业主"
        }

    def calculate_attractiveness(self):
        """计算各市场综合吸引力得分"""
        weighted_scores = np.dot(self.scores, self.weights)
        return weighted_scores

    def select_target_markets(self, threshold=7.5):
        """选择目标市场并输出决策建议"""
        scores = self.calculate_attractiveness()
        ranked_markets = np.argsort(scores)[::-1]

        print("="*50)
        print("印尼新能源汽车细分市场吸引力评估结果")
        print("="*50)
        for idx in ranked_markets:
            print(f"- {self.market_names[idx]}: {scores[idx]:.2f}分")

        target_markets = [self.market_names[idx] for idx in ranked_markets if scores[idx] > threshold]

        print("\\n" + "="*50)
        print("目标市场选择决策建议")
        print("="*50)
        print(f"核心目标市场: {target_markets[0]}")
        print(f"战略机会市场: {target_markets[1] if len(target_markets)>1 else '无'}")

# ====== 2. 执行评估 ======
if __name__ == "__main__":
    evaluator = MarketAttractiveness()
    evaluator.select_target_markets()
`,
    result: `==================================================
印尼新能源汽车细分市场吸引力评估结果
==================================================
- IKN高净值家庭: 8.43分
- 网约车司机: 8.29分
- 政府公务车: 6.17分
- 苏门答腊企业主: 6.25分

==================================================
目标市场选择决策建议
==================================================
核心目标市场: IKN高净值家庭
战略机会市场: 网约车司机`
  }
];

// --- 状态管理 ---

// 推荐改动：默认显示第一个知识库中的代码
const editorCode = ref(knowledgeBase[0].code);

const currentExpectedResult = ref('');

// --- 核心逻辑 (无变化) ---
watch(editorCode, (newCode) => {
  let matched = false;
  for (const item of knowledgeBase) {
    if (item.keywords.some(keyword => newCode.includes(keyword))) {
      currentExpectedResult.value = item.result;
      matched = true;
      break;
    }
  }
  if (!matched) {
    currentExpectedResult.value = '未知代码，无法获取预期结果。请粘贴指定的代码片段。';
  }
}, {immediate: true});

</script>